#include<bits/stdc++.h> 
using namespace std;
//	任务很简单，给定任意一个正整数N，你需要数一数从1-N，一共多少个1数码。比如12，从1-12有
//	1，10，11，12，一共5个1
//1.每个输入有一个测试用例，每个测试用例是一个正整数N≤2^30
//2.对于每个测试用例，输出1的数码总数
//3.数论 
int main(){
//如果死办法做肯定就超时了，只能数理分析，求出每一位的1个数，然后加起来就行了。比如123
//百十个三位分别是24个，20个，13个。取百位1，剩下23，得到24，则猜测是右边数字+1。取十
//位2，剩下左边1右边3，得到20，则猜测是(左边数字+1)*10。取个位3，剩下左边12，得到13，
//则猜测是(左边数字+1)*1。再拿四位数1234来分析，最后得出如下结论其实该位有多少个1与当
//前位数和当前数值有关。具体结论是（1）当这位是0，则为左边剩余*10^当前位数，这个位数是
//从后往前计算的，最低位叫做0位。（2）当这位是1，则为左边剩余*10^当前位数+右边剩余。
//（3）当这位大于1，则为(左边剩余+1）*10^当前位数
	string N;
	cin>>N;
	int len = N.length();
	int left = 0, right = 0;
	int count = 0;
	for(int i = 0;i<len;i++){
		string sl, sr;
		sl = N.substr(0,i);	//读取左右剩余 
		sr = N.substr(i+1,len-i-1);
		if(sl == "") left = 0;	//转换左右剩余 
		else left = stoi(sl);
		if(sr == "") right = 0;
		else right = stoi(sr);
		int now = N[i] - '0';	//读取当前 
		if(now==0){	//根据当前判断 
			count += left * pow(10, len-i-1);	//计数 
		}
		else if(now==1){
			count += left * pow(10, len-i-1) + right + 1;
		}
		else{
			count += (left+1) * pow(10, len-i-1);
		}
	}
	cout<<count<<endl;
	return 0;
} 